24. 两两交换链表中的节点
mid
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
迭代
简单
用个伪头节点记录初始位置
func swapPairs(head *ListNode) *ListNode {
	fakeHead := &ListNode{Next: head}
	pre := fakeHead
	for pre.Next != nil && pre.Next.Next != nil {
		p, q := pre.Next, pre.Next.Next
		// p q 交换
		pre.Next = q
		p.Next = q.Next
		q.Next = p
		pre = p
	}
	return fakeHead.Next
}
递归
先交换头两个节点,之后的节点递归交换,其实还是迭代的思想
func swapPairs(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	p, q := head, head.Next
	p.Next = q.Next
	q.Next = p
	p.Next = swapPairs(p.Next)
	return q
}